package com.yonyou.gmmc.service.maintain.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.marketing.common.dto.freeTime.FreeTimeDto;
import org.marketing.common.dto.maintain.CarModelDto;
import org.marketing.common.dto.maintain.MaintainDealerDto;
import org.marketing.common.dto.maintain.MaintainDto;
import org.marketing.common.dto.maintenanceorder.MaintenanceDto;

import com.yonyou.gmmc.common.annotation.OracleDb;
import com.yonyou.gmmc.service.maintain.dto.InsuranceExpireDto;
import com.yonyou.gmmc.service.maintain.dto.MaintainRecord;
import com.yonyou.gmmc.service.maintain.model.TtMaintenanceRecord;

import tk.mybatis.mapper.common.Mapper;

@OracleDb
public interface TtMaintenanceRecordMapper extends Mapper<TtMaintenanceRecord> {

	/**
	 * 根据经销商取得该经销商的空余时间
	 * 
	 * @author WangHuicheng
	 * @date 2016年12月7日
	 * @param dealerCode
	 * @return
	 */
	public List<FreeTimeDto> getFreeTime(@Param("dealerCode") String dealerCode);
	
	/**
	* 生成预约单号
	* @author QianKun
	* @date 2017年3月25日
	* @param dealerCode
	* @return
	*/
	public String maintainOddNumber(@Param("dealerCode") String dealerCode);

	/**
	 * @author QianKun 养修预约列表查询
	 * @date 2016年11月17日
	 * @param userId
	 * @return
	 */
	public List<MaintainDto> queryMaintainData(@Param("userId") String userId);

	/**
	 * @author QianKun 养修预约详情查询
	 * @date 2016年11月17日
	 * @param resnId
	 * @return
	 */
	public List<MaintainDto> queryMaintainDataById(@Param("resnId") String resnId);

	/**
	 * 养修预约经销商，车辆信息查询
	 * 
	 * @author QianKun
	 * @date 2017年2月17日
	 * @param openId
	 * @return
	 */
	public List<MaintainDto> queryMaintainSel(@Param("userId") Integer userId);
	
	public Integer selectPotentialUser(@Param("openId") String openId);

    public Integer selectPotentialUserByOdd(@Param("OddNumber") String OddNumber);


	/**
	 * 全部省/市查询 90011001：省,90011002：市
	 * 
	 * @author QianKun
	 * @date 2017年2月21日
	 * @param maintainDealerDto
	 * @return
	 */
	public List<MaintainDealerDto> queryMaintainDealerMap(@Param("regionType") String regionType);

	/**
	 * 根据省查市
	 * 
	 * @author QianKun
	 * @date 2017年3月1日
	 * @param parentCode
	 * @return
	 */
	public List<MaintainDealerDto> querySelectCityMap(@Param("parentCode") String parentCode);

	/**
	 * 养修搜索经销商城市
	 * 
	 * @author QianKun
	 * @date 2017年2月21日
	 * @param maintainDealerDto
	 * @return
	 */
	public List<MaintainDealerDto> querySelectCity(@Param("regionName") String regionName);

	/**
	 * 查询该城市下的经销商
	 * 
	 * @author QianKun
	 * @date 2017年2月21日
	 * @param maintainDealerDto
	 * @return
	 */
	public List<MaintainDealerDto> queryMaintainDealer(@Param("regionName") String regionName);

    /**
     * 查询该城市下的经销商 (养修预约使用)
     * 
     * @author QianKun
     * @date 2017年2月21日
     * @param maintainDealerDto
     * @return
     */
    public List<MaintainDealerDto> queryMaintainDealers(@Param("regionName") String regionName);

	/**
	 * 搜索某经销商
	 * 
	 * @author QianKun
	 * @date 2017年3月1日
	 * @param regionCode
	 * @param dealerName
	 * @return
	 */
	public List<MaintainDealerDto> querySearchDealer(@Param("dealerName") String dealerName);
	
    /**
     * 搜索某经销商 (养修预约使用)
     * 
     * @author QianKun
     * @date 2017年3月1日
     * @param regionCode
     * @param dealerName
     * @return
     */
    public List<MaintainDealerDto> querySearchDealers(@Param("dealerName") String dealerName);

	/**
	 * 根据微信ID查找出该用户下绑定的车辆信息
	 * 
	 * @author QianKun
	 * @date 2017年3月8日
	 * @param openId
	 * @return
	 */
	public List<CarModelDto> getCarInfoByOpenID(@Param("openId") String openId);

	/**
	 * 插入微信履历
	 * 
	 * @param list
	 * @return
	 */
	public int insertBatchMaintain(List<MaintainRecord> list);

    /**
    * 维修预约确认
    * @author QianKun
    * @date 2017年3月25日
    * @param maintainDto
    * @return
    */
    public long updateAppointment(MaintainDto maintainDto);
    
    /**
    * 根据单号查养修预约
    * @author QianKun
    * @date 2017年3月25日
    * @param oddNumber
    * @return
    */
    public MaintainDto selectMaintainByOdd(@Param("oddNumber") String oddNumber);
    
    /**
    * 根据单号查维修履历
    * @author Administrator
    * @date 2017年3月25日
    * @param maintenanceWorkOrderNum
    * @return
    */
    public List<MaintenanceDto> queryMaintenanceByIdMap(@Param("maintenanceWorkOrderNum") String maintenanceWorkOrderNum,@Param("dealerCode") String dealerCode);
    
    /**
    * 更新该养修预约的预约时间
    * @author Administrator
    * @date 2017年3月25日
    * @param reservationNO
    */
    public void updateMaintainTime(@Param("maintainDto") MaintainDto maintainDto);
    
    /**
    * 插入维修工单
    * @author Administrator
    * @date 2017年3月25日
    * @param maintenanceDto
    */
    public void insertMaintenanceOrder(@Param("maintenanceDto") MaintenanceDto maintenanceDto);
    

    /**
    * 更新维修工单
    * @author Administrator
    * @date 2017年3月25日
    * @param maintenanceDto
    */
    public void updateMaintenanceOrder(@Param("maintenanceDto") MaintenanceDto maintenanceDto);
    
    public String selectCar(@Param("vin") String vin);
    
    public Map<String,Object> selectMaintainExpireInfo(@Param("vin") String vin);
    
    public List<InsuranceExpireDto> selectInsuranceExpire(@Param("date") String date);

    /**
     * 根据carId查询userId
     * @param carId
     * @return
     */
	public Integer getUserId(@Param("carIdInt") Integer carIdInt);
	
    public String selectDealerById(@Param("potentialUserId") Integer potentialUserId);
    
    public String selectInsuranCode(@Param("name") String name);

	public Integer queryOddNoCount(String oddNo);

	public Integer selectOddNoCount(@Param("maintenanceDto") MaintenanceDto maintenanceDto);
}